When the Macintosh was first introduced its operating structure was much simplier than it is today in many ways. Fonts were limited to bitmapped images and there wasn't any need for a style menu. Everything needed by the system to describe a font was contained in a single unit known as a “FONT” resource. A FONT resource contains the height and width information, kerning information, and a bitmapped image of each character of the font. This bitmap is a dot-for-dot representation of how that character is placed on the screen. There is a seperate FONT resource for each installed size of a font.
When you select a font name from the menu you are actually selecting the name of a Macintosh resource. In this case it is a FONT resource. Since computers always work faster with numbers, these names were provided many as a convenience to the user. The typical practice of applications was to first accept a named selection from the user and immediately convert it to a resource ID number. This resource ID number is what was, and still is, considered the proper method of unique identification by the Macintosh system.
Sizing and Style variations to the selected font were made algorythmically to display it on the screen. That is, bits are shifted and/or cloned to create Bold and/or Italic images on the fly.
B. In comes the FOND resource
With the advent of postscript and the demand for fonts with intristic (true) style variations the need for a new font mechanism became apparent to Apple developers. They came up with a new resource call a “FOND” resource. This resource added many new features to the Macintosh font and at the same time a certain amount of complexity.
The “font” has now become a compound element within the Macintosh system. The FOND improved the quality of fonts by adding fractional width and kerning data, intristic font styles and high resolution postscript definitions. There are four elements which now make up a Macintosh font:
1) FONT resource
2) FOND resource
3) Postscript Printer File
4) Adobe Font Metrics File (not used)
The Postscript printer file contains the necessary Postscript instructions to produce each character of the font. It is required in one form or another for high resolution output. It might be permanently installed in the output device or contained on the system available for printing. The Adobe Font Metrics file contains redundent character width and spacing information. It is not used in the United States but some European applications may take advantage of it.
The main role of the FOND resource is to tie all of these elements together. It serves as a map and information source to all the other components of the font. A key part of the FOND is known as the Font Association Table. This table is “the” map to all of the screen font resources. Remember, there was a seperate FONT resource for each size installed. This also applies to the intristic style variations. So now there are seperate FONT resources for each size and style of a font. One for 10 pt. Roman, one for 10 pt. Bold, one for 10 pt. Italic, and one for 10 pt. BoldItalic.
There is a seperate entry in the font association table for each of these resources. This entry is identified first by the selected size, and then the selected style. From these the appropriate screen font resource ID number is obtained. The system can now search for this resource ID, if found it is used to display the characters on the screen. If it is not found, the System will select the next closest size and scale to resources bitmap and data to correspond to the selected size and style.
The FOND resource was designed to support any number of font sizes and up to 47 intristic style variations. Due to practical limitations on memory requirements only 4 of the 47 style variations are used in practice. Additionally, font vendors typically limit themselves to not more than 5 sizes per style maximum. This keeps the size of the association table under control since unused associations do not exist. In addition to the Association table there are character width tables, one for each style installed. These are removed as well when a Style has either been removed or not installed.
1. and the Printer font file
The FOND resource also contains another map which is used to determine the name of the appropriate postscript printer file to send to the printer. This map is know as the "Style Suffix String" table. It is a static table with space reserved for all 47 styles. It is not affected by the sizes and styles actually installed in the system.
This table contains a set of indexes for each style. There is one for each style implemented when the font was designed. The remainder of the 47 styles are filled with the default style information, usually the roman style. These indexes point to the words which are used to construct the actual postscript names.
C. Now there's the NFNT
In an attempt to uniquely identify each resource component of a font Apple came up with a complex numbering scheme. This scheme tied each of the screen font resource ID numbers to the FOND resource ID. Remember all resources of a given type must have a unique ID number.
This numbering scheme effective limited the number of possible numeric combinations available for identifying font components. To overcome this problem another new resource was later introduced. This new resource known as a “NFNT“ resource replaces the old screen “FONT“ resource. It is exactly the same except for its identification.
NFNT resources still require a unique ID number and may optionally be named. However, the ID number is no longer tied into the FOND ID number. This allows the system to take advantage of all 32000 possible ID numbers instead of a reduced number of combinations within that 32000.
Unlike FONT resources, NFNTs cannot exist without a corresponding FOND resource. They rely on the name of the FOND resource to appear in font menus. Remember FONTs existed before the FOND and can appear in font menus by themselves if there is not a corresponding FOND resource.
In today's font technology the NFNT resource is the preferred format for screen font resources. In fact, NFNTs are always looked for first by the operating system, then if the right one isn't found, the operating system looks for a FONT resource. If a properly identified resource isn't found at this point... I hope you saved your document recently!
II. How fonts work
A. Locating the FOND resource
Font Menus are built by applications when they launch. When a large number of fonts are installed it becomes quite visible here and in the display of any pull-down menus the application may have.
The names being placed in the menus are the names of the FOND resources and any bitmapped FONTs that are installed.
Usually there is a FOND resource for each style available so that its name appears in the font menu. FONDs for style variations are usually redundant as the information they contain is also contained in the parent FOND. The parent FOND is usually the Roman style.
When you select one of these names the current technology provides two ways for the system to locate the FOND resource. Either by name or by resource ID number. It is up to the application programmer to choose his preferred method.
Programmers like numbers because they save space over names. Unfortunately some have elected to save FOND ID numbers in the documents their applications create. This has an adverse affect on the documents transportability to another system and is against Apple's recommendations.
B. Locating the FONT/NFNT resource
Once the system has read the FOND resource it looks for the size and style currently in use.
The font association table is scanned for an installed size, when found the resource ID of the Roman font is recorded. If it is not found the next closest size is used and a scaling factor applied.
Next, the association table is scanned for the current style. If found that resource ID is substituted for the one recorded earlier and we have an intristic font. If it is not used the roman resource ID is used and the style is then derived by the system.
Derived style variations are dangerous as they are only supported by Apple products. A typical occurance would be the selection of a Bold style from a font menu, then making bolder via the style menu command of your application. This will make it font appear bolder on the screen and may even output to the laserwriter. However, if you send it to a high resolution device such as the linotronic, it will not print the same. These devices require a postscript definition for every typeface. If you are lucky you will get the roman face, but even system bombs can occur.
Automatic font scaling presents not problems in terms of output matching because the scaling factor is applied to the postscript code in the printer files.
C. Locating the Printer file
When you issue the Print command in your application to a laserwriter device you are handing temporary control over the system to the LaserWriter driver. It obtains information about the fonts you have used in your document from the application.
The laserwriter driver the checks the printer to see if the fonts are already resident by sending it the true postscript name which is obtained from the FOND resource. If it is the driver checks the next name. If it is not, the true postscript name is edited down to derive the printer file name.
Once the LaserWriter driver has the printer file name it searchs the system folder for that file and if found, sends it to the printer. If it doesn't find the file, it will either substitute a font which is built into the printer, or it will create a bitmapped version of the font. Bitmaps almost always look terrible.
III. Potential for Conflicts
A. Limitations of the System
Apple has always provided a means of installing additional fonts into your system by providing a utility called Font/DA Mover. This utility allows you to copy fonts to and from the system file thereby installing and removing fonts.
Font/DA Mover automatically checks for and resolves font conflicts for you during the copy process. It first checks the destination file, usually the system, for an existing ID numbers. If it finds one it automatically renumber the resource about to be copied.
Until recently this was the only way it could be done. In order for fonts to be available they had to be in a open file. Since the system file is always running it is always open.
Engineers at Apple never anticpated the explosive growth in the Macintosh font market. Because of this there is a limit to the number of fonts that can be installed in the system. It is around 200 fonts maximum.
B. Multiple Font files
It is third party utilities that allow us to exceed this limitation. Namely, Suitcase II and MasterJuggler. Both utilities provide the capability to have multiple font files open simultaneously.
When you start working with multiple fonts files is when you begin to worry most about font conflicts. Font/DA Mover can only work with two files at a time, the source and the destination. The fonts contained in those two files are all that Font/DA Mover is aware of when resolving conflicts. Fonts contained in other files are unknown and the font IDs used by them are not considered. This allows Font/DA Mover can assign a new number which is already in use in another file. This is a font conflict. It can occur between two FOND, FONT, or NFNT resources. It also can occur between FONT and NFNT resources.
Fortunately, additional utilities are included in both the Suitcase II and MasterJuggler which help you resolve conflicts across multiple files.
C. Inter-system conflicts
Another kind of conflict you can encounter results from an inconsistentcy from one system to another. This becomes a problem when applications are being used which do not conform to Apple's recommendations.
Apple recommends that applications save font names to remember fonts in the documents they create instead of font numbers. Font names are guaranteed to be the same from one system to the next if the same fonts are installed. Font numbers are not... remember Font/DA Movers automatic renumbering!
D. What conflicts look like
Inter-system conflicts are the easiest to identify. The document looks fine on you system, but looks entirely different on another. On closer examination you will notice the typeface has changed. Some are immediately obvious if a conflict involves a font such as Zapf Dingbats.
The system is unaware of the difference, it simply displays what it is told to... font number 21 for example. It doesn't care whether font number 21 is Helvetica or Times. When you return the file to the original system it displays correctly again.
FOND versus FOND resource conflicts on a given system are also easy to identify, but are somewhat confusing at first. What happens is when you select a font from the font menu a entirely different typeface is displayed. The name you selected is checked marked when you look at the menu again. Regardless of how you change the size or style it is still wrong. This is the result of two FONDs having the same ID number in combination with the way the system looks for fonts. That is the most recently font file is searched first, and continues in reverse order. The conflicting font is located in a file opened after the file containing the selected font. Therefore the conflicting font is located first and consequently displayed. If you were to select the conflicting font from the menu it would operate normally.
The most elusive conflict is a screen font conflict. In this case the resource ID for a given size and style is the same as another size and style used in a different font. To encounter this conflict you must select just the right font, size and style. If it involves two fonts you don't use very often a conflict of this type could exists for some period of time before you actually discovered it.
IV. Essential font tools
When working with multiple fonts files it is therefore essential that we have some way to resolve conflicts.
As mentioned earlier, the same utilities which provide the ability to use multiple font files also include utilities which help resolve conflicts across those multiple files.
Having evaluated both we have choosen Suitcase II as our preference. This is due to the way the desk accessory portion operates in addition to the generous limits on the number of files involved in conflict resolution.
The utilities included in the Suitcase II package are: the Suitcase II desk accessory which is used to control which font files are open or closed. The Font Harmony utility which resolves conflicts accross multiple files, and Font and Sound Valet which compresses font files so the occupy only 50% of the normal disk space.
V. Avoiding font conflicts
A. Setting up the Font Library
Now that we have to tools to work with multiple files we can establish a strategy for managing our fonts.
We want to be able to add new fonts to the library easily and efficiently. Of course we want to do this without creating font conflicts.
We also want to consider how we want to access our fonts. That is, do we want them all online at the same time. Or, do we want to control which fonts are online a any particular time. If we keep them all online we will have slower startups and application launches.
In either case when need to setup the font library in a manner which allows us to completely resolve any conflicts which might occur now or with future additions to the library.
Since the utilities we have do not access the system file directly we have to take a couple of extra steps to ensure success. This involves the creation of a set of Master font files.
B. System Fonts
To begin, we remove all of the fonts out of the system file and place them in a font file by themselves. Taking this a step further we can place our postscript fonts in one font file, and our bitmap fonts in another. In doing this we will be able to include them when resolving conflicts.
There are three fonts which must remain in the system file. They are used by the system and cannot be removed. These are Chicago 12pt, Monaco 9 & 12pt, and Geneva. We make copies of these however. Again placing them in a font file of there own - usually named “System Fonts” for easy identification. We will include this file when resolving conflict, but we will never activate it with Suitcase.
You might have to take this a step further depending on what applications you are using. Some applications contain internal fonts for special purposes. SuperPaint for example has all of its’ toolbox icons defined as a font - like DingBats. This presents a problem because that font potentially occupies one of our font numbers. In fact SuperPaint contains three fonts which could cause conflicts. Any conflicts would occur only when we are in SuperPaint, of course.
We place system and application fonts in a font file all by themselves. This will allow us to include them when resolving conflicts without allowing them to be renumbered. We never want to change the ID of any system or application font.
C. Contructing Master Files
The remainder of setting up master files is relatively easy. We simply combine all of our fonts into a smaller collection of files.
We need to reduce the number of files to one that will meet the capabilities the Font Harmony utility, our conflict resolver. The current limit is 99 files maximum.
One other thing to consider is the size of the files we are creating. Ideally we do not want to exceed the capacity of a floppy disk it we want to backup the library when we’re done.
After we have completed contructing the files we use Font Harmony to resolve any conflicts. All files including the system fonts file are added to the Font Harmony list. Then we select only those files we want to allow renumbering in. Remember, we do not want to renumber either the system or application fonts files. Click the “Harmonize” button and the rest is carried out automatically.
D. Font vendors take action
Just recently font vendors have begun to distribute fonts which do not have conflicts with any other fonts in their library. This is making life a lot easier as we no longer have to resolve conflicts “every” time we get a new font.
There are a vast number of fonts that were released before the vendors took up this pratice. Therefore there are no guarantees that new fonts will not conflict with your library. Additionally, font manufacturing is perform by humans capable of making mistakes.
To avoid corrupting the integrity of our library we will have to continue to check for conflicts and will have a continuous need for our master files.
E. Updating the master files
Updating the Master library is accomplished fairly simply once that library is established.
Combine all new fonts into one or more new files. If you add new fonts to an existing file, all existing fonts in that file could be renumbered when Font Harmony is run.
Add all of the library files to the Font Harmony list and select only the new files to resolve conflicts in. Click the “Harmonize” button and any conflicts between the new files and the master library will be resolved.
We want to keep the number of files in our master library to a minimum. By “harmonizing” outside of the master library we maintain its integrety but end up with a smaller (under utilized) file for the new fonts.
Since there are no conflicts between the new fonts and the existing library we could simply copy them to an existing file to fill it out. There is only one problem with this,that is Font/DA Mover will always randomly renumber NFNT resources. Whether there is a conflict or not.
Our FOND resources will not be affected, they are handled properly. The randomizing of our preferred NFNT resources means we MUST re-harmonize the file we place the new fonts into. Because our FOND numbers have not changed they will not be affected by Font Harmony either. Our NFNTs will be renumbered if any conflicts are found.
Remember that NFNT ID numbers are not tied to the FOND ID number as FONTs are. If a conflict involves a FONT resource Font Harmony must renumber the FOND, and all other FONT resources that FOND uses.
F. Using multiple font vendors
If you plan to use fonts from various font manufacturers you should have any problems in terms of resource ID numbers. Apple has begun allocatings blocks of numbers to the various manufacturers. Fonts received from shareware sources do not benefit from this control.
One problem which can occur even between the top manufacturers is a conflict between names of both FOND resources and Printer file names. They are utilities available with which you can rename the FOND resources, this will avoid conflicts in the font menus.
The printer file is a different story. You cannot change its name, if you do the FOND will never be able to find the correct file. The only solution is to keep the printer fonts in two seperate folders. Suitcase II makes this an easy thing to manage. It will search for printer files in all folders containing open font files. Therefore, if we keep the necessary screen fonts in a folder with the printer fonts Suitcase II will allow us print normally without keep the printer fonts in the system folder.
One thing to be aware of is the most recently opened folder is searched first for the printer file, working backwards through the folder chain. This is the only printer file that will be used regardless of which FOND resource made the request.
G. Working with thousands of fonts
With the latest developements in font display technology, specifically, Adobe Type Manager we can maximize the number of fonts in our library. This utility draws fonts on the screen from the descriptions contained in the printer files yielding the highest possible resolution.
This has the side benefit of reducing the need for screen font resources of various type sizes. In fact, only one screen font is needed so that the font is available in the menus. Since the highest number that can be assigned to any type of resource is 32,767 we can maintain exactly that many typefaces in our library without conflict. Adobe recommends keeping both the 10 and 12 point sizes installed in their documentation for ATM. This keeps the display speed reasonable at smaller point sizes. Maintaining this benefit reduces the maximum number of typefaces to 16,383.
[As you approach a large number of fonts in your library you will begin to respect the amount of disk space required to store them. Keeping them all online can begin to degrade certain aspects of system performance as well. Specifically when applications launch they immediate build the font menu - if they have one. Each application must take its own inventory of the fonts available. The more available the long it takes. It also affects the select of fonts from pull down menus.
If you use dialogs to select fonts you can avoid the pull down menu problem. The other two require additional steps in your font management tasks. The use of individual folders of screen and printers fonts works well. You open and close them with Suitcase II as they are needed. By using the individual folders strategy you can overcome both the speed degredation and disk space problems.]
VI. Other font tools
Managing a large number of fonts can be made easier through the use of some additional utilities available from various sources.
MasterJuggler like Suitcase II includes utilities which are similar to each other. A couple of differences worth noting are that MasterJuggler has a utility which allows you to manually renumber, rename, and convert FONTs to NFNTs. Suitcase II includes Font/Sound Valet which compresses font files reducing the disk space the occupy and the access time by the system.
Compressed fonts can only be used with Suitcase II installed. Suitcase II handles the decompression when the font is needed. That means you must decompress them before they can be used by any application which does not support desk accessories, such as Font/DA Mover.
theFONDler is a utility created by myself. It avoids many of the problems of working with large font libraries by allowing you to move NFNTs without disrupting “harmonization”. It also provides renaming and renumbering, conflict testing, and cataloging features.
theFONDler also works with compressed fonts because it supports desk accessories. However, when you copy or move a font, the resulting copy will be decompressed. Suitcase II decompresses only. You must use Font/Sound Valet to re-compress it.
After you have established your font library you may want to print typeface samples of all your fonts. I have created another utility called theTypeBook which can make this task much easier. It prints a professional typeface reference page for each of the installed fonts you select. Since the layout is automatic and the program supports printer spooling it saves many hours in front of your Macintosh.